package com.itheima.health.util;



import org.mindrot.jbcrypt.BCrypt;
import org.springframework.util.DigestUtils;

/**
 * @author ：Mr Java_LIU
 * @date ：Created in 2022年08月04日
 * @description ：
 *                  管理端登录是密码与授权校验
 * @version: 1.0
 */
public class PasswordUtils {
    //参数一String password:是管理端登录时输入的密码  参数二String dbPassword是:数据库中存在的密码  为了校验是否匹配 匹配就登录放行
    public static boolean checkPassword(String password,String dbPassword) {
        //判断密码的前缀是md5就用md5加密方式
        if (dbPassword.startsWith("{md5}")) {
            //获取一个md加密的密码对象
            String mdPassword = DigestUtils.md5DigestAsHex(password.getBytes());
            //判断输入时的md5加密密码和数据库中的密码  因为数据库里的密码是有前缀({md5}) 所以把前缀去掉 用""替代后再判断
            return mdPassword.equals(dbPassword.replace("{md5}", ""));
        } else if (dbPassword.startsWith("{bcrypt}")) {
            //判断输入的密码如果是bcrypt   因为数据库里的密码是有前缀({bcrypt}) 所以把前缀去掉 用""替代后再判断
            return BCrypt.checkpw(password, dbPassword.replace("{bcrypt}", ""));//解密
        }
        //返回输入匹配成功的密码(输入的密码与数据库的密码进行匹配)
        return password.equals(dbPassword);
    }
    public static void main(String args[]){
    String password="1234";//$2a$10$ofPkBDUezOJp6Sik63Q/0.QlU8a1itEyzldjSXqfn2nDPqXjN0Ljm
        //通过BCrypt.hashpw获取要加密的密码  传递录入的密码参数，再获取密码盐(不为空随机产生的盐)
        String pwt = BCrypt.hashpw(password, BCrypt.gensalt());//加密并创建随机盐
        System.out.println(pwt);//进行加密   $2a$10$B1bM10XaiZElTc7GagYv7OaX7Nk1Uzp9bZu8HP4KU60aIXFQayKoK
        //校验密码 true表示校验一致可以登录  false密码错误  输入的密码  和数据库产生的随机码进行校验
        boolean checkpw = BCrypt.checkpw(password, pwt);//true 解密
        System.out.println(checkpw);
    }
}
